﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tibet.Datos.DaosMySql;
using Tibet.Datos.DaosSqlServer;
using Tibet.Datos.Interfaces;
using Tibet.Datos.FabricaDatos;
using Tibet.Datos.Interfaces;


namespace Tibet.Datos.FabricaDatos
{
    public abstract  class  FabricaDao
    {
        

       public FabricaDao()
        {
          
        }
   
        /// <summary>
        /// Metodo que devuelve la fabrica de escogencia segun la opcion dada
        /// </summary>
        /// <param name="tipoFabrica"></param>
        /// <returns></returns>
        public static FabricaDao ObtenerFabricaDeDao(int tipoFabrica) 
        {
            switch (tipoFabrica)
            {
                case 1:
                    return new FabricaSqlServer();
                case 2:
                    //return new FabricaMySql();
                default:
                    return null;
            }
            
        }
        public static FabricaDao obtenerFabricaDaoSqlServer()
        {
            return new FabricaSqlServer();

        }

        /// <summary>
        /// Retorna la Fabrica de MySql
        /// </summary>
        /// <returns></returns>

        //public static FabricaDao obtenerFabricaDaoMySql()
        //{
        //    return new FabricaMySql();
        //}

        /// <summary>
        /// Declaracion de los metodos abstractos para el Cliente
        /// </summary>
        /// <returns></returns>

        
        public abstract IDaoAccesoCliente ObtenerDaoCliente();


        public abstract IDaoAccesoCredencial ObtenerDaoCredencial();


        public abstract IDaoAccesoUsuario ObternerDaoUsuario();


        public abstract IDaoAccesoRol ObtenerDaoRol();
   
    
        /// <summary>
        /// Declaracion de los metodos abstractos
        /// </summary>
        /// <returns></returns>

        public abstract IDaoAccesoProyecto ObternerDaoSqlServerProyecto();

//        public abstract IDaoAccesoPerfilRegla ObtenerDaoSqlServerPerfilRegla();
        public abstract IDaoAccesoPerfilRegla ObtenerDaoPerfilRegla();


        public abstract IDaoAccesoMetrica ObtenerDaoSqlServerMetrica();

   //     public abstract IDaoAccesoRegla ObtenerDaoSqlServerRegla();

        public abstract IDaoAccesoRegla ObtenerDaoRegla();

        public abstract IDaoAccesoReporte ObtenerDaoSqlServerReporte();

    }
}
